#pragma once
#include <math.h>

struct FVector3
{
	float X;
	float Y;
	float Z;
public:
	inline FVector3() :X(0.f), Y(0.f), Z(0.f) {}
	inline FVector3(float* InV) : X(InV[0]), Y(InV[1]), Z(InV[2]) {}
	inline FVector3(float px, float py, float pz) : X(px), Y(py), Z(pz) {}
	FVector3(const FVector3&) = default;

	inline FVector3 operator-(const FVector3& V) const {
		return FVector3(X - V.X, Y - V.Y, Z - V.Z);
	}
	inline FVector3 operator+(const FVector3& V)const {
		return FVector3(X + V.X, Y + V.Y, Z + V.Z);
	}
	inline FVector3 operator-(const float& V)const {
		return FVector3(X - V, Y - V, Z - V);
	}
	inline FVector3 operator+(const float& V)const {
		return FVector3(X + V, Y + V, Z + V);
	}
	inline FVector3 GetAbs()const
	{
		return FVector3{ fabsf(X),fabsf(Y),fabsf(Z) };
	}
};

FVector3 Recast2UnrealPoint(const FVector3& Vector);
FVector3 Unreal2RecastPoint(const FVector3& Vector);